//deamon.loader是jsloader与dojo的require的结合，并结合实际情况提供跨frame的操作。
//主要实现思路是：总体实现采用jsloader的方法，但替换loadJavaScript，将其修改为Ajax的同步调用，并将js内容取回，并执行eval
//执行javascript文件，模拟<script>的做的内容。
var deamon = {
	getJavaScript : function(className) {
		//FIXME 完成jsloader的工作，可以将jsloader拿来，仅修改其中我们需要修改的内容。
		//deamon.loadJavaScript(className, callback);
		deamon.jqueryLoadJavaScript(className);
	},
	
	/**
	 * jquery同步加载script
	 * @param {需要加载的js路径} className
	 */
	jqueryLoadJavaScript : function(className) {
		$.ajax({
	  		type : 'GET',
	  		url : className,
	  		dataType : 'script',
	  		success : function(msg) {
     			alert( "Data Saved: " + msg );
	  		},
	  		async : false//同步,设置false将锁住浏览器，用户其它操作必须等待请求完成才可以执行
		}); 
	},
	
	/**
	 * 异步加载js通过回调函数实现
	 * @param {需要加载的js路径} className
	 * @param {回调函数} callback
	 */
	loadJavaScript : function(className, callback) {
		//获取所有的<script>标记
        var ss=document.getElementsByTagName("script");
        //判断指定的文件是否已经包含，如果已包含则触发onsuccess事件并返回
        for (i=0;i<ss.length;i++){
            if (ss[i].src && ss[i].src.indexOf(className)!=-1){
                //this.onsuccess();
            	callback();
                return;
            }
        }
        //创建script结点,并将其属性设为外联JavaScript文件
        s = document.createElement("script");
        s.src = className;
        s.type = "text/javascript";
        //获取head结点，并将<script>插入到其中
        var head = document.getElementsByTagName("head")[0];
        head.appendChild(s);
       
        //对于IE浏览器，使用readystatechange事件判断是否载入成功
        //对于其他浏览器，使用onload事件判断载入是否成功
        //s.onload=s.onreadystatechange=function(){
        s.onload = s.onreadystatechange = function(){
            //在此函数中this指针指的是s结点对象，而不是JsLoader实例,
            if (this.readyState && this.readyState == "loading") return;
            callback();
        }
        s.onerror = function(){
            head.removeChild(s);
        }
	}
	
	/**
	 * 由于jsLoader中loadJavaScript为异步加载，故在此仿照jsloader写一个异步加载完成进行回调方式实现同步
	 * @param {} className js文件的位置
	 * @param {} callback 回调函数
	 */
	/*loadJavaScript : function (className, callback) {
		//此处为何写成节点操作？ document.writeln()将原先页面的head内容全部清除了
		var _script = document.createElement('script');
        //_script.setAttribute('charset','UTF-8');
        _script.setAttribute('src', className);
        _script.setAttribute('type', 'text/javascript');
        document.getElementsByTagName('head')[0].appendChild(_script);
        if (callback != undefined && typeof(callback) == "function") {
	        if (window.navigator.userAgent.indexOf("MSIE") >= 1) {alert('1111');
	            _script.onreadystatechange = function(){
	                if(this.readyState == 'loaded' || this.readyState == 'complete'){
	                	 alert('js load complete 1 !');
	                   	 callback();
	                }
	            };
	        } else if (window.navigator.userAgent.indexOf("Firefox") >= 1){alert('2222' + _script.readyState +  _script.onload);
	            _script.onload = function(){
	            	alert('js load complete 2 !');
	                callback();
	            };
	        } else {
	        	alert('js load complete 3 !');
	            callback();
	        }
        	_script.onload = _script.onreadystatechange=function(){
                //在此函数中this指针指的是s结点对象，而不是JsLoader实例,
                //所以必须用self来调用onsuccess事件，下同。
                if (this.readyState && this.readyState == "loading") return;
                //self.onsuccess();
                callback();
            }
        }
	}*/
};

//定义函数指针，针对pf.base.js中的定义。
var getJavaScript = deamon.getJavaScript;